﻿using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.Design;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using T.ApiResults;
using T.Basic.API.Appliction.Command.CargoOwnerCommand;
using T.Basic.API.Appliction.Command.FuelCostCommand;
using T.Basic.API.Appliction.Command.LineCommand;
using T.Basic.Domain.T.Basic.Model;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;

namespace T.Basic.API.Controllers
{
    /// <summary>
    /// 油费管理控制器
    /// </summary>
    [Route("api/[controller]/[action]")]
    [Authorize]//JWT验证
    [ApiController]
    public class FuelCostController : ControllerBase
    {
        /// <summary>
        /// 中介者
        /// </summary>
        private readonly IMediator _mediator;
        public FuelCostController(IMediator mediator)
        {
            _mediator = mediator;
        }
        /// <summary>
        /// 添加油费信息
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ApiResult<int>> CreateFuelCost(FuelCostCreateCommand command)
        {
            ApiResult<int> result = new ApiResult<int>();
            try
            {
                command.CompanyID = HttpContext.User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value;//公司ID
                command.User_Id = int.Parse(HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);//用户ID
                command.CreatedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value;//创建人
                result.Code = await _mediator.Send(command);
                //result.Code = await _mediator.Send(new FuelCostCreateCommand()
                //{

                //    CompanyID = HttpContext.User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value,
                //    User_Id = int.Parse(HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value),
                //    LicensePlateNumber = command.LicensePlateNumber,
                //    FuelCostPerLiter = command.FuelCostPerLiter,
                //    RefuelingQuantity = command.RefuelingQuantity,
                //    StartingKilometers = command.StartingKilometers,
                //    PayMethod = command.PayMethod,
                //    OtherPayMethod = command.OtherPayMethod,
                //    HandledBy = command.HandledBy,
                //    FuelCostNotes = command.FuelCostNotes,
                //    CreatedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value,
                //    CreatedDate = DateTime.Now,

                //});
            }
            catch (Exception)
            {
                result.Code = -1;
                result.Message = "添加油费信息失败";
                throw;
            }
            return result;
        }
        /// <summary>
        /// 删除油费信息（批删）
        /// </summary>
        /// <param name="Command"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ApiResult<int>> DeleteAllFuelCost(FuelCostDeleteAllCommand Command)
        {
            ApiResult<int> result = new ApiResult<int>();
            try
            {
                Command.DeletedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value;//删除人
                Command.DeletedDate = DateTime.Now;//删除时间
                result.Code = await _mediator.Send(Command);
                //result.Code = await _mediator.Send(new FuelCostDeleteAllCommand()
                //{
                //    FuelCostIds = Command.FuelCostIds,
                //    DeletedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value,
                //    DeletedDate = DateTime.Now,
                //});
            }
            catch (Exception)
            {
                result.Code = -1;
                result.Message = "批删油费信息失败";
                throw;
            }
            return result;
        }
        /// <summary>
        /// 删除油费信息（单删）
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ApiResult<int>> DeleteFuelCost([FromQuery] FuelCostDeleteCommand command)
        {
            ApiResult<int> result = new ApiResult<int>();
            try
            {
                command.DeletedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value;//删除人
                command.DeletedDate = DateTime.Now;//删除时间
                result.Code = await _mediator.Send(command);
                //result.Code = await _mediator.Send(new FuelCostDeleteCommand()
                //{
                //    FuelCostId = command.FuelCostId,
                //    DeletedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value,
                //    DeletedDate = DateTime.Now,
                //});
            }
            catch (Exception)
            {
                result.Code = -1;
                result.Message = "删除（单删）油费信息失败";
                throw;
            }
            return result;
        }
        /// <summary>
        /// 反填油费信息
        /// </summary>
        /// <param name="command"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<ApiResult<FuelCost>> GetFuelCostByAsync([FromQuery]FuelCostGetByIdCommand command)
        {
            ApiResult<FuelCost> result = new ApiResult<FuelCost>();
            try
            {
                result.Data = await _mediator.Send(command);
            }
            catch (Exception ex)
            {
                result.Code = -1;
                result.Message = ex.Message;
                throw;
            }
            return result;
            //try
            //{
            //    return await _mediator.Send(command);
            //}
            //catch (Exception)
            //{

            //    throw;
            //}
        }
        /// <summary>
        /// 修改油费信息
        /// </summary>
        /// <param name="FuelCostUpdateCommand"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ApiResult<int>> UpdateFuelCost(FuelCostUpdateCommand command)
        {
            ApiResult<int> result = new ApiResult<int>();
            try
            {
                command.CompanyID = HttpContext.User.FindFirst(JwtRegisteredClaimNames.Sid)?.Value;//公司ID
                command.User_Id = int.Parse(HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value);//用户ID
                command.UpdatedBy = HttpContext.User.FindFirst(ClaimTypes.Name)?.Value;//修改人
                command.UpdatedDate = DateTime.Now;//修改时间
                result.Code = await _mediator.Send(command);
            }
            catch (Exception)
            {
                result.Code = -1;
                result.Message = "修改油费信息失败";
                throw;
            }
            return result;

        }
    }
}
